import java.io.*;
import java.util.Scanner;

public class FileSearch {
    public static void main(String[] args) throws FileNotFoundException {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入要查找的目录:>");
        File rootDir = new File(input.next());
        if (!rootDir.isDirectory()) {
            System.out.println("输入有误, 您输入的目录不存在!");
            return;
        }
        System.out.println("请输入要查找的字段:>");
        String word = input.next();
        //在给定的文件路径里面查找字段
        search(rootDir,word);
    }
    //利用递归来查找文件中的字段
    private static void search(File rootDir, String word) throws FileNotFoundException {
        //列出内容
        File[] files = rootDir.listFiles();
        //如果文件为空则结束
        if(files == null){
            return;
        }
        //循环遍历每一个文件下的普通文件
        for (File f: files) {
            //判断是不是普通文件并且找到了所给的字段
            if(f.isFile()){
                //读取普通文件中的内容并比较
                String content = readfile(f,word);
                if (content.equals(word)){
                System.out.println("在" + f.getAbsolutePath() + "找到了"+ content);
                }
            }else if(f.isDirectory()){
                //如果是文件夹则继续递归
                search(f,word);
            }else {
                //如果既不是普通文件也不是文件夹则忽略
                continue;
            }
        }
    }

    private static String readfile(File f, String word) throws FileNotFoundException {
        //因为我们要查找的是字符，所以采用字符流
        Reader reader = new FileReader(f);
        //构造一个StringBuilder来存放字符
        StringBuilder stringBuilder = new StringBuilder();
        while (true){
            try {
                int c = reader.read();
                if(c == -1){
                    break;
                }
                stringBuilder.append((char)c);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return stringBuilder.toString();
    }
}
